#pragma once
#define INF 0
#define DBG 1
#define ERR 2
#define DEFAULT_LEVEL DBG
#define LOG(level, format, ...)                                                       \
    do                                                                                \
    {                                                                                 \
        if (level < DEFAULT_LEVEL)                                                    \
            break;                                                                    \
        time_t t = time(NULL);                                                        \
        struct tm *ltm = localtime(&t);                                               \
        char tmp[32] = {0};                                                           \
        strftime(tmp, sizeof(tmp), "%H:%M:%S", ltm);                                  \
        printf("[%s][%s][%d]: " format "\n", tmp, __FILE__, __LINE__, ##__VA_ARGS__); \
    } while (0)
#define ILOG(format, ...) LOG(INF, format, ##__VA_ARGS__)
#define DLOG(format, ...) LOG(DBG, format, ##__VA_ARGS__)
#define ELOG(format, ...) LOG(ERR, format, ##__VA_ARGS__)